package com.ushine.web.base.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ushine.web.base.model.system.OrgDO;
import com.ushine.web.base.model.system.UserDO;
import com.ushine.web.component.page.PageRequestQuery;

import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * @Author: yls
 * @Date: 2022/03/01 09:41
 * @Description: 组织接口
 * @Version 1.0
 */
public interface IOrgService extends IService<OrgDO> {

    /**
     * 功能描述:
     * 〈 添加组织〉
     *
     * @param org 组织实体类
     * @return : java.lang.Boolean
     * @author : yls
     * @date : 2022/03/01 10:45
     */
    Boolean insertOrg(OrgDO org);

    /**
     * 功能描述:
     * 〈根据id查询组织〉
     *
     * @param id 组织id
     * @return : java.util.Optional<com.ushine.web.base.model.system.OrgDO>
     * @author : yls
     * @date : 2022/03/01 09:48
     */
    Optional<OrgDO> getOrgById(Long id);


    /**
     * 功能描述:
     * 〈根据组织名称查询组织〉
     *
     * @param orgName 组织名称
     * @return : java.util.Optional<com.ushine.web.base.model.system.OrgDO>
     * @author : yls
     * @date : 2022/03/01 09:48
     */
    Optional<OrgDO> getOrgByOrgName(String orgName);

    /**
     * 功能描述:
     * 〈 查询org列表 〉
     *
     * @param ids id集合
     * @return : java.util.List<com.ushine.web.base.model.system.OrgDO>
     * @author : yls
     * @date : 2022/03/01 09:57
     */
    List<OrgDO> listOrgs(Set<Long> ids);

    /**
     * 功能描述:
     * 〈查询org列表 ，多线程，带数据权限〉
     *
     * @param user 用户信息
     * @param ids  id集合
     * @return : java.util.List<com.ushine.web.base.model.system.OrgDO>
     * @author : yls
     * @date : 2022/3/8 15:56
     */
    List<OrgDO> listOrgsByThread(UserDO user, Set<Long> ids);

    /**
     * 功能描述:
     * 〈 分页查询组织 〉
     *
     * @param pageRequestQuery 分页查询条件
     * @return : com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.ushine.web.base.model.system.OrgDO>
     * @author : yls
     * @date : 2022/03/01 11:00
     */
    Page<OrgDO> listOrgByPage(PageRequestQuery<OrgDO> pageRequestQuery);

}
